package tp.pr5.mv.command;

import tp.pr5.mv.CPU;
import tp.pr5.mv.Memory;
import tp.pr5.mv.OperandStack;
import tp.pr5.mv.ProgramCounter;

public abstract class Command { /* Clase abstracta command compuesta por un array de comandos, un método abstracto
 executeCommand que implementan los distintos comandos, un método abstracto que devuelve el array de comandos y un 
 método abstracto parse, que será el parseador de los distintos comandos */
	private static Command[] commandSet = { new RUN(), new STEP(), new STEPS(), new QUIT(), new WRITE(), new CPOP(), new CPUSH()  }; 
	
	
	public abstract boolean executeCommand(Memory mem, OperandStack stack, ProgramCounter pc,  CPU cpu);
	
	public static Command[] getCommandSet() {
		
		return commandSet;
	}
	
	public abstract Command parse(String line); 
	
	
}
